
#pragma once

#include <cstddef>
#include <type_traits>

#include "atr/core/boolean.hpp"
#include "atr/core/float.hpp"

namespace atr {
namespace core {

template <char Character>
using _char  = std::integral_constant<char, Character>;

template <char16_t Character>
using _char16_t  = std::integral_constant<char16_t, Character>;

template <char32_t Character>
using _char32_t  = std::integral_constant<char32_t, Character>;

template <int Integer>
using _int  = std::integral_constant<int, Integer>;

template <long Long>
using _long  = std::integral_constant<long, Long>;

template <short Short>
using _short  = std::integral_constant<short, Short>;

template <size_t Size>
using _size_t = std::integral_constant<size_t, Size>;

template <wchar_t WCharacter>
using _wchar_t = std::integral_constant<wchar_t, WCharacter>;

using _nullptr = std::integral_constant<std::nullptr_t, nullptr>;
using _void    = void;

} // namespace core
} // namespace atr
